/**
 * 文件名称:  ITBcOrganService.java
 * 文件序号:  序号
 * 内容描述:  文件简单描述，多行换行书写
 * 版权声明:  山东鸿蝶信息技术有限公司
 * 创建用户:  zhangkai
 * 创建日期:  2017/1/17 15:29
 * 修改用户:  无
 * 修改日期:  无
 * 修改说明:  无
 * 文件版本:  V1.0
 * 文件路径:
 */
package com.hongdee.rbac.dept.service;

import com.hongdee.rbac.dept.entity.TBcOrgan;
import com.hongdee.rbac.role.entity.TBcRole;
import org.springframework.web.multipart.MultipartFile;


import java.util.List;
import java.util.Map;

/**
 * 名  称:ITBcOrganService
 * 类  型: interface
 * 描  述: 用一句话描述类的作用
 * 路  径:com.hongdee.rbac.dept.service
 * 作  者:zhangkai
 * 日  期:2017/1/17 15:29
 */
public interface ITBcOrganService {

    /**
     * 判断所选择的节点部门是否在其部门以下
     * @param uid
     * @param oId
     * @return
     * @throws Exception
     */
    public boolean getChildDeptList(String uid,String oId) throws Exception;

    public boolean getChildDeptListByCompany(String uid,String oId) throws Exception;

    /**
     * 方法名称:info
     * 方法描述: 查询组织详细数据
     * 参数名称: String id 组织 ID
     * 返回内容:
     * 异常说明:
     * 创建用户:
     * 创建时间:
     * 修改用户:
     * 修改时间:
     * 修改内容:
     */
    public Map info(String id) throws Exception;

    /**
     * 方法名称: update
     * 方法描述: 更新组织状态
     * 参数名称: String id 组织主键
     * 参数名称: String status 组织状态
     * 返回内容:
     * 异常说明:
     * 创建用户:
     * 创建时间:
     * 修改用户:
     * 修改时间:
     * 修改内容:
     */
    public void update(String id, String status) throws Exception;

    /**
     * 方法名称:saveOrUpdate
     * 方法描述: 保存或更新实体组织数据
     * 参数名称: TBcOrgan 组织实体
     * 返回内容:
     * 异常说明:
     * 创建用户:
     * 创建时间:
     * 修改用户:
     * 修改时间:
     * 修改内容:
     */
    public TBcOrgan saveOrUpdate(TBcOrgan bcOrgan) throws Exception;

    public TBcOrgan save(Map data) throws Exception;

    public void saveRoleDataOrg(TBcOrgan data, String uid) throws Exception;

    public Map newInfo(String id) throws Exception;

    public List<Map> comboBrand(String uid) throws Exception;
    /**
     * 方法名称: page
     * 方法描述: 分页查询变更历史
     * 参数名称: String start 记录起始行数
     * 参数名称: String limit 分页大小
     * 参数名称: String pId 用户选中的组织 ID
     * 参数名称: String searchValue 组织机构列表查询条件
     * 返回内容: 分页数据:
     * 异常说明:
     * 创建用户: 张国凯
     * 创建时间:
     * 修改用户: 张国凯
     * 修改时间:
     * 修改内容:
     */

    public Map page(String start, String limit, String pId, String searchValue, String uid) throws Exception;


    /**
     * 方法名称:tree
     * 方法描述: 根据登录用户查询其有权限的组织机构
     * 参数名称: String companyId 公司 ID
     * 返回内容:
     * 异常说明:
     * 创建用户:
     * 创建时间:
     * 修改用户:
     * 修改时间:
     * 修改内容:
     */
    public List tree(String companyId, String type) throws Exception;

    /**
     * 数据角色使用查询Tree
     * @param companyId
     * @param type
     * @param uid
     * @return
     * @throws Exception
     */
    public List orgOrleDataTree(String companyId, String type,String uid) throws Exception;

    /**
     * @param root 组织根节点 ID
     * @param type 组织类型
     * @return Map
     * @throws Exception 基类异常
     * @desc 查询组织转换字典
     * @author zhangkai
     * @date 2017/2/9
     * @time 13:38
     * @update_user
     * @update_time
     * @update_desc:
     */
    Map convert(String root, String type) throws Exception;

    /**
     * @param companyId 当前组织 ID
     * @param type      查询类型 0 仅有部门，1 加上人员
     * @return List
     * @desc 查询组织机构树
     */

    List orgTree(String companyId, String type,String uid) throws Exception;

    /**
     * 根据部门ID 获得公司信息
     *
     * @param oid
     * @return
     * @throws Exception
     */
    public Map<String, Object> findCompanyInfo(String oid) throws Exception;

    /**
     * 根据部门ID 向上查询组织架构上级的信息
     * @param opId
     * @param deptList
     * @return
     * @throws Exception
     */
    public List<Map<String, Object>> buildDeptChildUp(String opId, List<String> deptList) throws Exception;

    public String findCompanyId(String oid) throws Exception;

    /***
     * 判断当前的公司ID是否是指定组织的下级
     * @param companyId
     * @param parentId
     * @return
     * @throws Exception
     */
    boolean isChildOfCompany(String companyId, String parentId) throws Exception;
    /***
     * 根据当前组织取其上线
     * @return
     * @throws Exception
     */
    Map<String,Object> parentMap(String deptId) throws Exception;

    /**
     * 公司下的部门
     * @param companyId
     * @param type
     * @return
     * @throws Exception
     */
    public List tree1(String companyId, String type) throws Exception;


    /**
     * 获得所有的公司信息
     * @return
     * @throws Exception
     */
    public List<Map<String,Object>> getCompanys(String uid,String area,String brand) throws Exception;

    /**
     * 根据公司ID 获得部门信息
     * @param pId
     * @return
     * @throws Exception
     */
    public List<Map<String,Object>> getCompanyDept(String pId)throws Exception;

    /**

     * @Name: 获取公司名称 和 公司ID
     * @Author: Liu XiaoLong
     * @Date: 2017/8/29 11:39
     */
    public List<Map<String,Object>> getCNameAndCId() throws Exception;
    /**

     * @Name: 获取品牌value 和 label
     * @Author: Liu XiaoLong
     * @Date: 2017/9/8 20:31
     * @Remark:
     */
    public List<Map<String,Object>> getOCarBrand() throws  Exception;

    /**
     * @Name: 写入图片
     * @Author: Liu XiaoLong
     * @Date: 2017/11/2 14:58
     * @Remark:
     */
    public void writePic(MultipartFile image,String id) throws Exception;

    /**
     * @Name: 读取图片
     * @Author: Liu XiaoLong
     * @Date: 2017/11/2 14:58
     * @Remark:
     */
    public byte[] readPic(String uid,String id) throws Exception;

    /**
     * 搜索门店信息
     * @param id
     * @param storeArea
     * @param storePArea
     * @return
     * @throws Exception
     */
    public List<Map<String,Object>> deptStoreArea(String id,String storeArea,String storePArea,String type) throws Exception;

    /**
     * 获取所有门店
     */
    public List<Map<String,Object>> AllDeptStore(String uid) throws Exception;

}
